/*
 * 工厂模式（Factory）
 *
 * 定义: 创建对象时不会对客户端暴露创建逻辑，并且是通过使用一个共同的接口来指向新创建的对象。
 *
 * 介绍: Java 中最常用的设计模式之一。它提供了一种创建对象的最佳方式，将创建和使用分开，工厂负责创建，使用者直接调用即可。
 *      《设计模式》一书中，工厂模式只被分为了两种：工厂方法和抽象工厂。
 *       而一些教程所提及的简单工厂，在原书中则是工厂方法的一种简单例子，可以说，基于简单工厂这个例子进行进一步的扩展就是常说的工厂方法。
 *       （当然，部分教程可能理解以及例子都是错误的，这点姑且忽略）。
 *
 * 使用缘由:
 * 为什么直接new就可以却还要工厂模式呢? 这是基于你要创建的类的复杂度来定的。
 * 比如说你要new的这个类在投入使用前还得设置各种各样的属性才能使用，但是你不能把这些属性默认值写死在类里面(类是别人的)。
 * 而这种设置动作若重复度很高，则可以将这个创建的过程抽取出来置于工厂类当中，这就是"工厂模式"。就如现实中的工厂一样。
 * 简单工厂是上面这种思想的简单实现，而工厂方法则是将简单工厂生产的每种产品分割并分别提供一个新工厂来创建(对应现实中的公厂规模变大了开分公司)，
 * 而抽象工厂则类似于
 * (现实中出名了，形成了一个品牌效应，从而在消费者眼中，这个抽象就形成了品牌工厂，而品牌下各种类的产品，创建细节则由更具体的旗下工厂来决定)
 *
 */
package com.zwh.se.design_pattern.creational.factory;

/**
 * 抽象工厂模式的主要角色如下：
 *
 * 抽象工厂（Abstract Factory）：提供了创建产品的接口，它包含多个创建产品的方法，可以创建多个不同等级的产品。
 * 具体工厂（Concrete Factory）：主要是实现抽象工厂中的多个抽象方法，完成具体产品的创建。
 * 抽象产品（Product）：定义了产品的规范，描述了产品的主要特性和功能，抽象工厂模式有多个抽象产品。
 * 具体产品（ConcreteProduct）：实现了抽象产品角色所定义的接口，由具体工厂来创建，它 同具体工厂之间是多对一的关系。
 */
